package com.cskaoyan.javase.file.api3.get4.high;

/**
 * @description: File类的高级获取功能
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

import java.io.File;
import java.util.Arrays;

/**
 * //返回一个字符串数组，这些字符串包括，此抽象的路径名表示的目录中的所有文件和文件夹的名字
 * //如果File对象表示的是一个文件，则返回null
 * //只能获取当前目录的下一层，并不是获取所有层级
 * //如果是一个空目录，返回一个长度为0的数组，而不是null
 * public String[] list() 专门给目录对象调用的
 *
 *
 * //返回指定File目录下的文件和文件夹的绝对路径形式的File对象数组
 * //如果File对象表示的是一个文件，则返回null
 * //只能获取当前目录的下一层，并不是获取所有层级
 * //如果是一个空目录，返回一个长度为0的数组，而不是null
 * public File[] listFiles()
 *
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        //创建对象
        File f = new File("E:\\1");
        String[] list = f.list();
        System.out.println(Arrays.toString(list));

        //如果调用该方法的不是一个目录,不是一个文件夹 而是一个文件
        //那么该方法的返回值是一个null
        //根据这个特点 可以用这个方法判断一个File对象是文件还是文件夹
        //不建议用这种方式,因为该方法可能会得到一个null null是很危险的 一不小心就空指针异常
        File f2 = new File("E:\\1\\1.txx");
        System.out.println(f2.list());

        //如果调用该方法的是一个目录 但是是一个空目录 这时候方法会返回一个长度为0的String数组
        File f3 = new File("E:\\1\\2");
        String[] list1 = f3.list();
        System.out.println(Arrays.toString(list1));
        System.out.println(list1.length);

        //相比于返回一个字符串数组,我更希望能够获得这些文件/文件夹的File对象
        //因为我拿到了对象 就可以做更多的操作
        //public File[] listFiles()
        //该方法的返回值是一个File数组,对象数组
        System.out.println("--------------------------------------");
        File[] files = f.listFiles();
        //我去判断当前目录下的文件 是文件还是文件夹
        //遍历数组
        //1,fori 增强for iter
        for (int i = 0; i < files.length; i++) {
            System.out.println("当前File对象表示的是:"+files[i].getPath()+"它是一个文件吗?"+files[i].isFile());
        }
      /*  for (File file : files) {
        }*/

    }
}
